package com.skyline.attraction.dao;

import java.util.List;

import com.skyline.attraction.model.Attraction;
import com.skyline.attraction.type.AttractionType;
import com.skyline.base.type.Activity;
import com.skyline.common.bean.Page;

/**
 * 景点类DAO接口
 * 
 * @author wuqh
 *
 */
public interface AttractionDao {

	/**
	 * 根据景点Id查找景点
	 * 
	 * @param attractionId
	 * @param activity
	 * @return
	 */
	public Attraction queryAttractionById(Long attractionId, Activity activity);

	/**
	 * 根据景点名称和景点类型查找景点
	 * 
	 * @param name
	 * @param type
	 * @param activity
	 * @return
	 */
	public List<Attraction> queryAttractionsByNameAndType(String name, AttractionType type, Activity activity);

	/**
	 * 根据景点名称和景点类型查找景点
	 * 
	 * @param name
	 * @param activity
	 * @return
	 */
	public List<Attraction> queryAttractionsByName(String name, Activity activity);

	/**
	 * 查询所以景点列表
	 * 
	 * @param page
	 * @param activity
	 * @return
	 */
	public List<Attraction> queryAttractions(Page page, Activity activity);

	/**
	 * 通过景点类型来查询景点列表
	 * 
	 * @param type
	 * @param page
	 * @param activity
	 * @return
	 */
	public List<Attraction> queryAttractionsByType(AttractionType type, Page page, Activity activity);

	/**
	 * 通过地点编号和地点偏移量（国家是3、省是5、地区是7）来查询景点列表
	 * 
	 * @param siteId
	 * @param subLen
	 *            （国家是3、省是5、地区是7）
	 * @param page
	 * @param activity
	 * @return
	 */
	public List<Attraction> queryAttractionsBySiteId(String siteId, int subLen, Page page, Activity activity);

	/**
	 * 通过地点编号、地点偏移量（国家是3、省是5、地区是7）和景点类型来查询景点列表
	 * 
	 * @param siteId
	 * @param subLen
	 *            （国家是3、省是5、地区是7）
	 * @param type
	 * @param page
	 * @param activity
	 * @return
	 */
	public List<Attraction> queryAttractionsBySiteIdAndType(String siteId, int subLen, AttractionType type, Page page,
			Activity activity);

	/**
	 * 更新的对象点的评分
	 * 
	 * @param attractionId
	 * @param star
	 * @return
	 */
	public void updateAttractionStar(Long attractionId, float star);

	/**
	 * 更新对象点的访问量
	 * 
	 * @param attractionId
	 * @param num
	 * @return
	 */
	public void updateAttractionVisitNum(Long attractionId, Integer num);

	/*
	 * 创建人
	 */
	/**
	 * 添加景点函数
	 * 
	 * @param name
	 *            景点名称
	 * @param portrait
	 *            头像
	 * @param type
	 *            参见{@link AttractionType}
	 * @param creatorId
	 *            创建者ID
	 * @param creatorNickName
	 *            创建者昵称
	 * @param creatorPortrait
	 *            创建者头像
	 * @param creatorEmail
	 *            创建者Email
	 * @param country
	 *            景点所在国家
	 * @param province
	 *            景点所在省份
	 * @param city
	 *            景点所在城市
	 * @param siteId
	 *            景点地点信息ID
	 * @param detailAddress
	 *            景点所在详细地址
	 * @param lat
	 *            纬度
	 * @param lng
	 *            经度
	 * @param introduction
	 *            简介
	 * 
	 */
	public long insertAttraction(String name, String portrait, AttractionType type, Long creatorId,
			String creatorNickName, String creatorPortrait, String creatorEmail, String country, String province,
			String city, String siteId, String detailAddress, Double lat, Double lng, String introduction);

	/*
	 * 管理员
	 */

	/**
	 * 更新景点信息
	 * 
	 * @param attractionId
	 *            景点ID
	 * @param name
	 *            景点名称
	 * @param type
	 *            参见{@link AttractionType}
	 * @param creatorId
	 *            创建者ID
	 * @param country
	 *            景点所在国家
	 * @param province
	 *            景点所在省份
	 * @param city
	 *            景点所在城市
	 * @param siteId
	 *            景点地点信息ID
	 * @param detailAddress
	 *            景点所在详细地址
	 * @param lat
	 *            纬度
	 * @param lng
	 *            经度
	 * @param introduction
	 *            简介
	 */
	public void updateAttraction(Long attractionId, String name, AttractionType type, String country, String province,
			String city, String siteId, String detailAddress, Double lat, Double lng, String introduction);

	/**
	 * 更新景点头像
	 * 
	 * @param attractionId
	 * @param portrait
	 */
	public void updateAttractionPortrait(Long attractionId, String portrait);

	/**
	 * 更新景点简介，由于景点的简介更新的比较频繁，所以单独提出
	 * 
	 * @param attractionId
	 * @param introduction
	 */
	public void updateAttractionIntroduction(Long attractionId, String introduction);

	/**
	 * 变更景点的管理员信息
	 * 
	 * @param attractionId
	 * @param adminId
	 * @param adminNickname
	 * @param adminEmail
	 * @param adminPortrait
	 */
	public void updateAttractionAdmin(Long attractionId, Long adminId, String adminNickname, String adminEmail,
			String adminPortrait);

	/**
	 * 更新景点状态
	 * 
	 * @param attractionId
	 * @param activity
	 */
	public void updateAttractionActivity(Long attractionId, Activity activity);

}
